gstmedia: Implement error handling.
authorBenjamin Otte <otte@redhat.com>
Tue, 18 Dec 2018 01:04:54 +0000 (02:04 +0100)
committerBenjamin Otte <otte@redhat.com>
Tue, 18 Dec 2018 01:04:54 +0000 (02:04 +0100)
I wonder who forgot that.
Whoops.

modules/media/gtkgstmediafile.c

index afbf637bd3bf60303ae3d21467bb33fbd28b11ff..745ba3bc8889ca8ece462968447593b18b369a3a 100644 (file)
@@ -158,6 +158,18 @@ gtk_gst_media_file_seek_done_cb (GstPlayer       *player,
   gtk_media_stream_update (GTK_MEDIA_STREAM (self), FROM_GST_TIME (time));
 }
 
+static void
+gtk_gst_media_file_error_cb (GstPlayer       *player,
+                             GError          *error,
+                             GtkGstMediaFile *self)
+{
+  if (gtk_media_stream_get_error (GTK_MEDIA_STREAM (self)))
+    return;
+
+  gtk_media_stream_gerror (GTK_MEDIA_STREAM (self),
+                           g_error_copy (error));
+}
+
 static void
 gtk_gst_media_file_end_of_stream_cb (GstPlayer       *player,
                                      GtkGstMediaFile *self)
@@ -184,6 +196,7 @@ gtk_gst_media_file_destroy_player (GtkGstMediaFile *self)
   g_signal_handlers_disconnect_by_func (self->player, gtk_gst_media_file_position_updated_cb, self);
   g_signal_handlers_disconnect_by_func (self->player, gtk_gst_media_file_end_of_stream_cb, self);
   g_signal_handlers_disconnect_by_func (self->player, gtk_gst_media_file_seek_done_cb, self);
+  g_signal_handlers_disconnect_by_func (self->player, gtk_gst_media_file_error_cb, self);
   g_object_unref (self->player);
   self->player = NULL;
 }
@@ -202,6 +215,7 @@ gtk_gst_media_file_create_player (GtkGstMediaFile *file)
   g_signal_connect (self->player, "position-updated", G_CALLBACK (gtk_gst_media_file_position_updated_cb), self);
   g_signal_connect (self->player, "end-of-stream", G_CALLBACK (gtk_gst_media_file_end_of_stream_cb), self);
   g_signal_connect (self->player, "seek-done", G_CALLBACK (gtk_gst_media_file_seek_done_cb), self);
+  g_signal_connect (self->player, "error", G_CALLBACK (gtk_gst_media_file_error_cb), self);
 }
 
 static void